Passed
Pull Request — master (#99)
by Mathieu
01:23
created

CreatePayStubCommandHandler   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 36
dl 0
loc 41
rs 10
c 0
b 0
f 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A execute 0 28 4
1
import {CommandHandler} from '@nestjs/cqrs';
2
import {Inject} from '@nestjs/common';
3
import {CreatePayStubCommand} from './CreatePayStubCommand';
4
import {IPayStubRepository} from 'src/Domain/PayStub/Repository/IPayStubRepository';
5
import {PayStub} from 'src/Domain/PayStub/PayStub.entity';
6
import {IUserRepository} from 'src/Domain/User/Repository/IUserRepository';
7
import {IFileRepository} from 'src/Domain/File/Repository/IFileRepository';
8
import {UserNotFoundException} from 'src/Domain/User/Exception/UserNotFoundException';
9
import {FileNotFoundException} from 'src/Domain/File/Exception/FileNotFoundException';
10
import {IsPayStubAlreadyExist} from 'src/Domain/PayStub/Specification/IsPayStubAlreadyExist';
11
import {PayStubAlreadyExistException} from 'src/Domain/PayStub/Exception/PayStubAlreadyExistException';
12
13
@CommandHandler(CreatePayStubCommand)
14
export class CreatePayStubCommandHandler {
15
  constructor(
16
    @Inject('IPayStubRepository')
17
    private readonly payStubRepository: IPayStubRepository,
18
    @Inject('IUserRepository')
19
    private readonly userRepository: IUserRepository,
20
    @Inject('IFileRepository')
21
    private readonly fileRepository: IFileRepository,
22
    @Inject('IsPayStubAlreadyExist')
23
    private readonly isPayStubAlreadyExist: IsPayStubAlreadyExist
24
  ) {}
25
26
  public async execute(command: CreatePayStubCommand): Promise<string> {
27
    const {date, fileId, userId} = command;
28
29
    const user = await this.userRepository.findOneById(userId);
30
    if (!user) {
31
      throw new UserNotFoundException();
32
    }
33
34
    const file = await this.fileRepository.findOneById(fileId);
35
    if (!file) {
36
      throw new FileNotFoundException();
37
    }
38
39
    if (
40
      true ===
41
      (await this.isPayStubAlreadyExist.isSatisfiedBy(user, new Date(date)))
42
    ) {
43
      this.fileRepository.remove(file);
44
45
      throw new PayStubAlreadyExistException();
46
    }
47
48
    const payStub = await this.payStubRepository.save(
49
      new PayStub(date, file, user)
50
    );
51
52
    return payStub.getId();
53
  }
54
}
55